package com.nine.algorithm.recursion.pascaltriangle;

/**
 * @author nine
 * @version 1.0
 * @description 杨辉三角
 * @date 24/5/3 11:26
 */
public class PascalTriangle {

	/*
	 * 简单的杨辉三角
	 * 1
	 * 1 1
	 * 1 2 1
	 * 1 3 3 1
	 * 1 4 6 4 1
	 * ...
	 * 根据杨辉三角的规律：
	 * 1、每一行增加一个数。
	 * 2、每一行的第一个数和最后一个数都是1。
	 * 3、从第三行开始，中间的数据规律为：a[i][j]=a[i-1][j-1]+a[i-1][j]。
	 */

	/**
	 * @param i 行
	 * @param j 列
	 * @return
	 */
	private static int element(int i, int j) {
		// 第一列、行和列相同时，返回1
		if (j == 0 || i == j) {
			return 1;
		}
		return element(i - 1, j - 1) + element(i - 1, j);
	}


	public static void print1(int n) {
		for (int i = 0; i < n; i++) {
			printSpace(n, i);
			for (int j = 0; j <= i; j++) {
				System.out.printf("%-4d", element(i, j));
			}
			System.out.println();
		}
	}


	/**
	 * 打印 杨辉三角
	 * 1
	 * 1   1
	 * 1   2   1
	 * 1   3   3   1
	 * 1   4   6   4   1
	 *
	 * @param n
	 */
	public static void print(int n) {
		for (int i = 0; i < n; i++) {
			printSpace(n, i);
			for (int j = 0; j <= i; j++) {
				System.out.printf("%-4d", element(i, j));
			}
			System.out.println();
		}
	}

	/**
	 * 打印空格
	 *
	 * @param n 行数
	 * @param i 第几行
	 */
	public static void printSpace(int n, int i) {
		int num = (n - 1 - i) * 2;
		for (int j = 0; j < num; j++) {
			System.out.print(" ");
		}
	}


	public static void main(String[] args) {
		// 计算某一行某一列的元素值
		// System.out.println(element(4, 2));

		print(10);
	}


}
